unit Soggetti_frm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, DbCtrls,ZDataset, StdCtrls;

type

  { TSoggetti }

  TSoggetti = class(TForm)
    btsalva: TButton;
    btelimina: TButton;
    btnuovo: TButton;
    cbsoggetti: TComboBox;
    edNome: TLabeledEdit;
    edCognome: TLabeledEdit;
    edRuolo: TLabeledEdit;
    edMail: TLabeledEdit;
    edTelefono: TLabeledEdit;
    EdCellulare: TLabeledEdit;
    EdFax: TLabeledEdit;
    Label1: TLabel;
    lblobbligatori: TLabel;
    mmNote: TMemo;
    zq_soggetti: TZQuery;
    procedure bteliminaClick(Sender: TObject);
    procedure btnuovoClick(Sender: TObject);
    procedure btsalvaClick(Sender: TObject);
    procedure cbsoggettiChange(Sender: TObject);
    procedure cbsoggettiExit(Sender: TObject);
    procedure cbsoggettiKeyPress(Sender: TObject; var Key: char);
    procedure edCognomeChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure LoadComboSoggetti();
    procedure ClearCampi();
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Soggetti: TSoggetti;

implementation

{ TSoggetti }
procedure TSoggetti.FormCreate(Sender: TObject);
begin
  //seleziono tutti i soggetti e li sparo dentro la combobox
  LoadComboSoggetti();
  //applico i permessi in base ai ruoli

end;

procedure TSoggetti.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction:=caFree;
end;


procedure TSoggetti.btnuovoClick(Sender: TObject);
begin
  //pulisce tutti i campi per consentire un nuovo inserimento
  ClearCampi();
  edCognome.SetFocus;
end;

procedure TSoggetti.btsalvaClick(Sender: TObject);
begin
  //controllo che i parametri obbligatori nome e cognome siano inseriti sia
  //per la modifica che per l'inserimento
  if ednome.Text='' then
  begin
     ShowMessage('Devi indicare il nome del soggetto.');
     edNome.SetFocus;
     exit();
  end;
  if edCognome.Text='' then
  begin
     ShowMessage('Devi indicare il cognome del soggetto.');
     edCognome.SetFocus;
     exit();
  end;
  // salva tutte le modifiche fatte sui campi nella tabella
  if cbsoggetti.Text<>'' then
  begin
  ////////////////////////////////////////////////////////////////////
  ///              MODIFICA SOGGETTO
  ////////////////////////////////////////////////////////////////////
      with zq_soggetti do
      begin
           Close;
           sql.Clear;
           sql.Add('UPDATE ANAGSOGGETTI SET '+
                          'NOME=:NOME,'+
                          'COGNOME=:COGNOME,'+
                          'RUOLO=:RUOLO,'+
                          'MAIL=:MAIL,'+
                          'TEL=:TEL,'+
                          'CELL=:CELL,'+
                          'FAX=:FAX,'+
                          'NOTE=:NOTE '+
                          'WHERE IDSOGGETTO=:ID');
           ParamByName('ID').AsInteger:=integer(cbsoggetti.Items.Objects[cbsoggetti.ItemIndex]);
           ParamByName('NOME').AsString:=edNome.Text;
           ParamByName('COGNOME').AsString:=edCognome.Text;
           ParamByName('RUOLO').AsString:=edRuolo.Text;
           ParamByName('MAIL').AsString:=edMail.Text;
           ParamByName('TEL').AsString:=edTelefono.Text;
           ParamByName('CELL').AsString:=EdCellulare.Text;
           ParamByName('FAX').AsString:=EdFax.Text;
           ParamByName('NOTE').AsString:=mmnote.Text;
           ExecSQL;
           //riaggiorna la lista dei soggetti nelle combo
           LoadComboSoggetti();
           //comunica l'esito positivo della modifica
           ShowMessage(edNome.Text+' ' + edCognome.Text + ' è stato modificato correttamente.');
      end;
  end
  else
  begin
            ////////////////////////////////////////////////////////////////////
            ///              INSERIMENTO SOGGETTO
            ////////////////////////////////////////////////////////////////////
            //inserisci il nuovo soggetto nel DB
            with zq_soggetti do
            begin
                 Close;
                 sql.Clear;
                 sql.Add('INSERT INTO ANAGSOGGETTI ('+
                     'NOME,'+
                     'COGNOME,'+
                     'RUOLO,'+
                     'MAIL,'+
                     'TEL,'+
                     'CELL,'+
                     'FAX,'+
                     'NOTE'+
                     ') VALUES (:NOME,:COGNOME,:RUOLO,:MAIL,:TEL,:CELL,:FAX,:NOTE)');
                 ParamByName('NOME').AsString:=edNome.Text;
                 ParamByName('COGNOME').AsString:=edCognome.Text;
                 ParamByName('RUOLO').AsString:=edRuolo.Text;
                 ParamByName('MAIL').AsString:=edMail.Text;
                 ParamByName('TEL').AsString:=edTelefono.Text;
                 ParamByName('CELL').AsString:=EdCellulare.Text;
                 ParamByName('FAX').AsString:=EdFax.Text;
                 ParamByName('NOTE').AsString:=mmNote.Text;
                 ExecSQL;
                 //riaggiorna la lista dei soggetti nelle combo
                 LoadComboSoggetti();
                 //comunica l'esito positivo dell'inserimento
                 ShowMessage(edNome.Text+' ' + edCognome.Text + ' è stato inserito correttamente.');
            end;
       end;
  btnuovoClick(self);
end;

procedure TSoggetti.bteliminaClick(Sender: TObject);
var
  buttonSelected : Integer;
begin

   //controllo che sia stato selezionato un soggetto sennò avverto
   //che è necessario selezionarne uno
   if cbsoggetti.ItemIndex<>-1 then
   begin
      //chiede conferma e poi cancella il record
      buttonSelected := MessageDlg('Si sta per eliminare '+edNome.Text+' '+edCognome.Text+' dal database. Continuare?',mtInformation, mbOKCancel, 0);
      if buttonSelected = mrOK     then
      begin
           with zq_soggetti do
           begin
                Close;
                sql.Clear;
                sql.Add('DELETE FROM ANAGSOGGETTI WHERE IDSOGGETTO=:ID');
                ParamByName('ID').AsInteger:=integer(cbsoggetti.Items.Objects[cbsoggetti.ItemIndex]);
                ExecSQL;
           end;
           //rilegge tutti i soggetti e li carica nelle combo
           LoadComboSoggetti();
           //pulisce tutti i campi
           ClearCampi();
      end
   end
   else ShowMessage('Per eliminare un soggetto è necessario prima selezionarne uno dalla lista.');
end;


procedure TSoggetti.cbsoggettiChange(Sender: TObject);
begin
     if cbSoggetti.ItemIndex<>-1 then
     begin
     //mostro nei campi il soggetto selezionato
          with zq_soggetti do
          begin
               Close;
               sql.Clear;
               sql.Add('SELECT * FROM ANAGSOGGETTI WHERE IDSOGGETTO=:ID');
               ParamByName('ID').AsInteger:=integer(cbSoggetti.Items.Objects[cbSoggetti.ItemIndex]);
               ExecSQL;
               Open;
               edNome.Text:=FieldByName('NOME').AsString;
               edCognome.Text:=FieldByName('COGNOME').AsString;
               edRuolo.Text:=FieldByName('RUOLO').AsString;
               edMail.Text:=FieldByName('MAIL').AsString;
               edTelefono.Text:=FieldByName('TEL').AsString;
               EdCellulare.Text:=FieldByName('CELL').AsString;
               EdFax.Text:=FieldByName('FAX').AsString;
               mmNote.Text:=FieldByName('NOTE').AsString;
          end;
     end;
end;

procedure TSoggetti.cbsoggettiExit(Sender: TObject);
begin
  (sender as TComboBox).ItemIndex := (sender as TComboBox).Items.IndexOfObject(TObject((sender as TComboBox).Items.Objects[(sender as TComboBox).ItemIndex]));
  (sender as TComboBox).OnChange(self);
end;

procedure TSoggetti.cbsoggettiKeyPress(Sender: TObject; var Key: char);
begin
  if key=#13 then
    SelectNext(sender as twincontrol,true,true);
end;


procedure TSoggetti.edCognomeChange(Sender: TObject);
begin
  btsalva.Enabled:=true;
end;


procedure TSoggetti.ClearCampi();
begin
  cbsoggetti.ClearSelection;
  edNome.Clear;
  edCognome.Clear;
  edRuolo.Clear;
  edMail.Clear;
  edTelefono.Clear;
  EdCellulare.Clear;
  EdFax.Clear;
  mmNote.Clear;
  btsalva.Enabled:=false;
end;


procedure TSoggetti.LoadComboSoggetti();
begin
//svuota combo
cbsoggetti.Clear;
with zq_soggetti do
        begin
             Close;
             sql.Clear;
             sql.Add('SELECT IDSOGGETTO, NOME, COGNOME FROM ANAGSOGGETTI');
             ExecSQL;
             Open;
             while not EOF do
             begin
                  //carico il campo NOME e COGNOME di ogni singolo record nella combo di visualizzazione
                  //di tutti i soggetti
                  cbsoggetti.Items.AddObject(FieldByName('COGNOME').AsString+' '+FieldByName('NOME').AsString,TObject(FieldByName('IDSOGGETTO').AsInteger));
                  Next;
             end;
        end
end;

initialization
  {$I soggetti_frm.lrs}

end.

